9.7 CXL 重置 (CXL Reset)
这一节定义了一种全新的、对于 CXL 体系结构至关重要的重置机制。它解决了 9.5 节中 FLR (功能级重置) 留下的核心问题:如何重置和恢复设备的 CXL.cache 和 CXL.mem 逻辑。
- CXL Reset 是什么?为何需要它?
- 定义: CXL Reset 是一种软件触发的机制,用于重置一个设备中所有参与 CXL.cache 和/或 CXL.mem 协议的功能的状态。同时,它也会像 FLR 一样重置这些功能的 CXL.io 部分。
- 必要性: 正如 9.5 节所解释的,标准的 FLR 无法影响 CXL.cache 和 CXL.mem 协议层。如果一个设备的缓存或内存一致性逻辑出现故障,或者在多租户环境中需要安全地重新分配设备,FLR 是不够的。CXL Reset 正是为填补这一空白而设计的,它提供了一种比重启整个设备更轻量、更精确的恢复和清理方法。
- CXL Reset 的范围和效果
CXL Reset 的影响范围非常明确,它介于单个功能的 FLR 和整个设备的物理重置之间。
- 重置的内容:
- CXL.cache 状态: 设备内部的缓存将被完全重置。
- CXL.mem 状态: 设备的内存控制器和相关状态机将被重置。
- 不受影响的内容:
- 物理链路 (Physical Link): CXL Reset 不会断开或重新训练物理链路。
- 非 CXL 功能: 设备上任何不参与 CXL.cache/mem 协议的纯 PCIe 功能不会受到影响。
- 谁必须支持:
- MLD (多逻辑设备): 对于支持内存池化的 MLD,CXL Reset 是强制要求的。
- SLD (单逻辑设备): 对于参与 CXL.cache/mem 的 SLD,必须支持 FLR 或 CXL Reset 中的至少一种。
- CXL Reset 期间的详细行为
这是本节的核心,详细描述了设备在执行 CXL Reset 时的内部操作:
- 设备缓存: 设备硬件会自动将缓存内容写回并使其失效。这一点与托管式热移除不同,软件在发起 CXL Reset 前不需要手动执行缓存清理操作。
- 内存内容:
- 易失性 HDM 的内容可能保留也可能不保留。规范还定义了一个可选功能,允许在 CXL Reset 期间清除或随机化易失性内存内容。
- 安全考量 (针对易失性内存):
- 清除易失性内存的功能对于防止数据泄露至关重要,尤其是在一个设备被从一个租户(主机)重新分配给另一个租户的场景中。
- 在这种场景下,Fabric Manager (FM) 必须使用安全擦除或 CXL Reset 的内存清除功能来清理设备,然后才能将其分配给新主机。
- 软件的责任与操作流程
- 发起方: CXL Reset 可以由主机软件 (System Software) 或 Fabric Manager (FM) 发起。
- 主机软件的准备工作: 在发起 CXL Reset 之前,主机软件有责任:
- 使所有受影响的功能进入静默状态,停止产生新的 CXL.io 请求。
- 下线 (Offline) 所有与该设备关联的 HDM 内存范围,确保没有新的内存访问。
- 软件操作步骤: 软件通过访问设备 Function 0 配置空间中的 CXL DVSEC 寄存器来控制此过程,流程大致为:验证能力 -> 准备系统 -> 发起重置 -> 等待完成或错误状态。
- 在多逻辑设备 (MLD) 中的行为
这一点对于内存池化和解耦架构至关重要:
- 隔离性: 当一个 MLD(物理上是一个设备,但虚拟化为多个逻辑设备并分配给不同主机)收到来自某个主机的 CXL Reset 请求时,该重置的影响范围必须仅限于分配给该主机的那个逻辑设备 (LD)。
- 无干扰: 其他主机及其分配的 LD 必须能够继续正常运行,不受影响。